package com.songlanyun.modules.material.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.songlanyun.common.enums.MaterialConstant;
import com.songlanyun.common.enums.NoticeConstant;
import com.songlanyun.common.utils.BeanUtil;
import com.songlanyun.common.utils.PageUtils;
import com.songlanyun.common.utils.Query;
import com.songlanyun.common.validator.ValidatorUtils;
import com.songlanyun.modules.material.dao.SystemMaterialDao;
import com.songlanyun.modules.material.dao.SystemNoticeDao;
import com.songlanyun.modules.material.entity.SystemMaterialEntity;
import com.songlanyun.modules.material.entity.SystemNoticeEntity;
import com.songlanyun.modules.material.model.SystemMaterialCheckDTO;
import com.songlanyun.modules.material.model.SystemMaterialDTO;
import com.songlanyun.modules.material.model.SystemNoticeCheckDTO;
import com.songlanyun.modules.material.model.SystemNoticeDTO;
import com.songlanyun.modules.material.service.SystemMaterialService;
import com.songlanyun.modules.material.service.SystemNoticeService;
import org.springframework.stereotype.Service;

import java.util.Date;
import java.util.Map;


@Service("yxtSystemNoticeService")
public class SystemNoticeServiceImpl extends ServiceImpl<SystemNoticeDao, SystemNoticeEntity> implements SystemNoticeService {


    @Override
    public PageUtils queryPage(Map<String, Object> params) {
        IPage<SystemNoticeEntity> page = this.page(
                new Query<SystemNoticeEntity>().getPage(params),
                new LambdaQueryWrapper<SystemNoticeEntity>()
                .eq(params.get("state") != null,SystemNoticeEntity::getState,params.get("state"))
                .orderByDesc(SystemNoticeEntity::getCreateTime)
                .orderByDesc(SystemNoticeEntity::getNoticeTime)
        );
        return new PageUtils(page);
    }

    @Override
    public Boolean check(SystemNoticeCheckDTO dto) {
        ValidatorUtils.validateEntity(dto);
        SystemNoticeEntity entity = this.getById(dto.getId());
        if(entity != null){
            entity = new SystemNoticeEntity();
            entity.setId(dto.getId());
            entity.setState(NoticeConstant.StateEnum.getByCode(dto.getState()));
            entity.setNoticeTime(new Date());
            this.baseMapper.updateById(entity);
            return Boolean.TRUE;
        }
        return Boolean.FALSE;
    }

    @Override
    public SystemNoticeEntity addEntity(SystemNoticeDTO dto) {
        ValidatorUtils.validateEntity(dto);
        SystemNoticeEntity entity = new SystemNoticeEntity();
        //保存
        BeanUtil.copyPropertiesIgnoreNull(dto, entity);//克隆一份
        this.save(entity);
        return entity;
    }


    @Override
    public SystemNoticeEntity updateEntity(SystemNoticeDTO dto) {

        ValidatorUtils.validateEntity(dto);
        //修改
        SystemNoticeEntity entity = null;
        if(dto.getId() != null){
            entity = this.getById(dto.getId());
            if(entity != null){
                BeanUtil.copyPropertiesIgnoreNull(dto, entity);//克隆一份
                this.updateById(entity);
            }
        }
        return entity;
    }
}
